In [5]:
"""
This script compares three variants of the "primes" code:
(1) pure python
(2) cython
(3) pure c (no python import)
"""
from cython_test import primes_py, primes
#import primes_py # the pure python variant
#import primes # the cython variant
import os # to run the C-
import sys
import time
print "\n"
print "=" * 70
print " B E N C H M A R K Python - Cython - C"
print "=" * 70
print "\n" * 2
t0 = time.time()
print "starting with the cython module ..."
r1 = primes.primes(10000)
t1 = time.time()
print "done in", t1 - t0, "seconds\n"
t2 = time.time()
print "executing C file via system command ..."
os.system('./primes_c')
t3 = time.time()
print "done in", t3 - t2, "seconds\n"
t4 = time.time()
print "running pure python code ... (this may take a while)"
sys.stdout.write(' ')
sys.stdout.flush()
primes_py.primes(10000)
t5 = time.time()
print "done in", t5 - t4, "seconds\n"
print "\n", "=" * 70, "\n" * 2
In [ ]:
import numpy as np
def primes(kmax):
result = []
p = np.zeros(10000)
if kmax > 10000:
kmax = 10000
k = 0
n = 2
while k < kmax:
i = 0
while i < k and n % p[i] != 0:
i = i + 1
if i == k:
p[k] = n
k = k + 1
result.append(n)
n = n + 1
return result
In [ ]:
def primes(int kmax):
cdef int n, k, i
cdef int p[10000]
result = []
if kmax > 10000:
kmax = 10000
k = 0
n = 2
while k < kmax:
i = 0
while i < k and n % p[i] != 0:
i = i + 1
if i == k:
p[k] = n
k = k + 1
result.append(n)
n = n + 1
return result